package tech.xs.sys.service;

import tech.xs.common.framework.service.CrudService;
import tech.xs.sys.domain.cache.DictCache;
import tech.xs.sys.domain.entity.SysDict;

/**
 * SysDictService
 *
 * @author 沈家文
 * @since 2023/5/10 15:18
 */
public interface SysDictService extends CrudService<SysDict> {

    /**
     * 通过字典编码从缓存中获取字典缓存
     *
     * @param dictCode 字典编码
     * @return 字典缓存
     * @author 沈家文
     * @since 2023/5/10 14:27
     */
    String getDictCache(String dictCode);

    /**
     * 重新加载全部字典缓存
     * <p>
     * 1.如果字典在数据库中不存在,则会删除该字典缓存<br>
     * 2.子字典缓存也会重新加载
     *
     * @author 沈家文
     * @since 2023/5/10 15:19
     */
    void reloadAllDictCache();

    /**
     * 根据字典编码重新加载单个字典缓存
     * <p>
     * 1.如果字典在数据库中不存在,则会删除该字典缓存<br>
     * 2.子字典也会重新加载
     *
     * @param dictCode 字典编码
     * @author 沈家文
     * @since 2023/5/10 15:17
     */
    void reloadDictCache(String dictCode);

    /**
     * 根据字典编码和子字典编码重新加载单个子字典缓存
     * <p>
     * 1.如果字典在数据库中不存在,则会删除该字典缓存<br>
     *
     * @param dictCode      字典编码
     * @param childDictCode 子字典编码
     * @author 沈家文
     * @since 2023/5/15 11:24
     */
    void reloadChildDictCache(String dictCode, String childDictCode);

    /**
     * 根据字典编码删除字典缓存
     * <p>
     * 1.子字典缓存也会被删除
     *
     * @param dictCode 字典编码
     * @author 沈家文
     * @since 2023/5/10 15:16
     */
    void deleteDictCache(String dictCode);


    /**
     * 删除子字典缓存
     *
     * @param dictCode      字段编码
     * @param childDictCode 子字典编码
     * @author 沈家文
     * @since 2023/5/24 15:45
     */
    void deleteChildDictCache(String dictCode, String childDictCode);

    /**
     * 根据字典编码删除字典
     * <p>
     * 1.删除字典<br>
     * 2.删除字典数据<br>
     * 3.删除字典缓存
     *
     * @param dictCode 字典编码
     * @author 沈家文
     * @since 2023/5/11 11:18
     */
    void deleteDictByCode(String dictCode);

    /**
     * 根据字典id删除字典
     * <p>
     * 1.删除字典<br>
     * 2.删除字典数据<br>
     * 3.删除字典缓存
     *
     * @param dictId 字段id
     * @author 沈家文
     * @since 2023/5/11 11:21
     */
    void deleteDictById(Long dictId);


}
